{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "e4380f06-0d9f-4ed1-b502-3d94bb50fa6d",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# 随机数种子\n",
    "torch.manual_seed(2333)\n",
    "\n",
    "# 定义超参数\n",
    "num_samples = 20\n",
    "hidden_size = 200\n",
    "num_epochs = 500"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "eb83cddd-fa3f-41d9-aa54-d0d158fb1c35",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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Bw4c0Pe//31lZ2dr0KBBysrK0o033iifzxeUrjev3wMPPKCRI0cqPj5ekydPDkyd0JEnn3xS48aNU3x8vPLy8vT8888HHe/KbzKSQinf7373O/2///f/dNJJJ+mkk05SYWHhcennzZt33LWaOXOm3cXoVChlXLNmzXH5j4+PD0rj5GvY3v8nLpdLF154YSBNNF3DV199VRdddJGGDRsml8uldevWnfCcTZs2KT8/X263W2PGjNGaNWuOSxPq7zpkBgFLly4199xzj1m4cKHxer1dOmfFihXG6/WadevWmXfeecd8/etfN6NGjTKfffZZIM3MmTPN+PHjzRtvvGH+93//14wZM8bMmTPHplJ0LtS8NDc3m6qqqqDHsmXLzODBg01dXV0gnSTz6KOPBqU7+jOIlO581lOnTjULFiwIyrvP5wscb25uNqeddpopLCw0xcXF5vnnnzcpKSlmyZIldhfnOKGWb9u2beaSSy4xzz77rNm5c6fZsGGDGTt2rLn00kuD0vXW9XviiSdMXFyceeSRR8z7779vFixYYJKTk01NTU276V9//XUTGxtrfvnLX5rS0lLz4x//2AwcONBs27YtkKYrv8lICbV8V111lXnggQdMcXGxKSsrM/PmzTNer9fs3bs3kGbu3Llm5syZQdfqwIEDkSrScUIt46OPPmo8Hk9Q/qurq4PSOPka7t+/P6hs7733nomNjTWPPvpoIE00XcPnn3/e/Od//qd5+umnjSSzdu3aTtN/9NFHJiEhwSxcuNCUlpaa+++/38TGxpr169cH0oT6mXUHwUs7Hn300S4FL62trSY9Pd3cfffdgX0HDx40brfb/PnPfzbGGFNaWmokmbfeeiuQ5oUXXjAul8tUVlaGPe+dCVdeJkyYYL71rW8F7evKl95u3S3f1KlTzQ9+8IMOjz///PMmJiYm6D/Y3/72t8bj8ZjGxsaw5L0rwnX9/vrXv5q4uDhz5MiRwL7eun6TJk0y119/feB5S0uLGTZsmFm+fHm76S+//HJz4YUXBu2bPHmy+c53vmOM6dpvMpJCLd+xmpubTVJSknnssccC++bOnWsuvvjicGe120It44n+f+1r1/DXv/61SUpKMvX19YF90XYN23Tl/4Ef/vCH5stf/nLQviuuuMLMmDEj8Lynn1lX0GzUA7t371Z1dbUKCwsD+7xeryZPnqyi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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 生成数据集\n",
    "x_train = torch.unsqueeze(torch.linspace(-1, 1, num_samples), 1) # 实用unsqueeze转化为二维张量\n",
    "y_train = x_train + 0.3 * torch.randn(num_samples, 1)\n",
    "\n",
    "# 测试集\n",
    "x_test = torch.unsqueeze(torch.linspace(-1, 1, num_samples), 1)\n",
    "y_test = x_test + 0.3 * torch.randn(num_samples, 1)\n",
    "\n",
    "# 绘制训练集和测试集\n",
    "plt.scatter(x_train, y_train, c='r', alpha=0.5, label='train')\n",
    "plt.scatter(x_test, y_test, c='b', alpha=0.5, label='test')\n",
    "plt.legend(loc='upper left')\n",
    "plt.ylim((-2, 2))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "b7f62a57-3736-4f2c-80b7-9e2fed86706e",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 定义一个可能会过拟合的网络\n",
    "net_overfitting = torch.nn.Sequential(\n",
    "    torch.nn.Linear(1, hidden_size),\n",
    "    torch.nn.ReLU(),\n",
    "    torch.nn.Linear(hidden_size, hidden_size),\n",
    "    torch.nn.ReLU(),\n",
    "    torch.nn.Linear(hidden_size, 1),\n",
    ")\n",
    "\n",
    "# 包含Dropout的网络\n",
    "net_dropout = torch.nn.Sequential(\n",
    "    torch.nn.Linear(1, hidden_size),\n",
    "    torch.nn.Dropout(0.5), # 一般放在Linear全连接层之后\n",
    "    torch.nn.ReLU(),\n",
    "    torch.nn.Linear(hidden_size, hidden_size),\n",
    "    torch.nn.Dropout(0.5),\n",
    "    torch.nn.ReLU(),\n",
    "    torch.nn.Linear(hidden_size, 1),\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "761937a3-0be0-4907-8ddd-08c6b0efe6ef",
   "metadata": {},
   "outputs": [],
   "source": [
    "optimizer_overfitting = torch.optim.Adam(net_overfitting.parameters(), lr=0.01)\n",
    "optimizer_dropout = torch.optim.Adam(net_dropout.parameters(), lr=0.01)\n",
    "\n",
    "criterion = nn.MSELoss()\n",
    "\n",
    "for epoch in range(num_epochs):\n",
    "    # overfitting网络训练\n",
    "    pred_overfitting = net_overfitting(x_train)\n",
    "    loss_overfitting = criterion(pred_overfitting, y_train)\n",
    "    # 清空提速\n",
    "    # 反向传播\n",
    "    # 更新参数\n",
    "    optimizer_overfitting.zero_grad()\n",
    "    loss_overfitting.backward()\n",
    "    optimizer_overfitting.step()\n",
    "\n",
    "    # dropout网络训练\n",
    "    pred_dropout = net_dropout(x_train)\n",
    "    loss_dropout = criterion(pred_dropout, y_train)\n",
    "    # 清空梯度\n",
    "    # 反向传播\n",
    "    # 更新参数\n",
    "    optimizer_dropout.zero_grad()\n",
    "    loss_dropout.backward()\n",
    "    optimizer_dropout.step()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "e27716af-16f6-40a2-b752-76e978614230",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 在测试过程中不使用dropout\n",
    "net_overfitting.eval()\n",
    "net_dropout.eval()\n",
    "\n",
    "# 预测\n",
    "test_pred_overfitting = net_overfitting(x_test)\n",
    "test_pred_dropout = net_dropout(x_test)\n",
    "\n",
    "# 绘制拟合效果\n",
    "plt.scatter(x_train, y_train, c='r',  alpha=0.3, label='train')\n",
    "plt.scatter(x_test, y_test, c='b', alpha=0.3, label='test')\n",
    "plt.plot(x_test, test_pred_overfitting.data.numpy(), 'r--', lw=2, label='overfitting')\n",
    "plt.plot(x_test, test_pred_dropout.data.numpy(), 'b--', lw=2, label='dropout')\n",
    "plt.legend(loc='upper left')\n",
    "plt.ylim((-2, 2))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "86efbda0-8653-43ef-bd6a-6e7c17428d0f",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.21"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
